package com.youlu.campus.service.rank;

import org.springframework.data.redis.core.ZSetOperations;

import java.util.Set;

public interface RankBaseService {

    void addAll(String key, Set<ZSetOperations.TypedTuple<String>> tuples);

    /**
     * 获取名次之间的排行榜数据,倒序
     *
     * @param key
     * @param start
     * @param end
     * @return
     */
    Set<ZSetOperations.TypedTuple<String>> getRankDatas(String key, Integer start, Integer end);

    /**
     * 添加子key的排行数据
     *
     * @param key
     * @param oKey
     * @param score
     */
    void addSingleRank(String key, String oKey, Double score);

    /**
     * 获取子key的名次
     *
     * @param key
     * @param oKey
     * @return
     */
    Long getSingleRankOrder(String key, String oKey);

    /**
     * 获取子key的分数
     */
    Double getSingleRankScore(String key, String oKey);

    /**
     * 获取排行榜总数量
     *
     * @param key
     * @return
     */
    Long getRankTotal(String key);

    /**
     * 累加子key的分数
     *
     * @param key
     * @param oKey
     * @param score
     */
    Double increRankScore(String key, String oKey, Double score);

    /**
     * 获取最大值
     *
     * @param key
     * @return
     */
    ZSetOperations.TypedTuple<String> getMax(String key);

    /**
     * 获取最小值
     *
     * @param key
     * @return
     */
    ZSetOperations.TypedTuple<String> getMin(String key);

    /**
     * 删除子Key
     * @param key
     * @param oKey
     * @return
     */
    boolean remove(String key, String oKey);

}
